package com.igeek.config.way2;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * TODO
 *
 * @author chh
 * @since 2024/5/20
 **/
public class BeanDefinitionTest {
    public static void main(String[] args) {
        //第一步：构建BeanDefinition对象,并设置其对应的属性
        AbstractBeanDefinition beanDefinition=BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();

        beanDefinition.setBeanClass(Person.class);
        beanDefinition.setScope("singleton");

        //获取IOC容器

        AnnotationConfigApplicationContext ac= new AnnotationConfigApplicationContext();

        //获取bean实例注册到容器中，并记得刷新
        ac.registerBeanDefinition("pe",beanDefinition);   //这里的参数唯一标识和我们之前定义好的beanDefinition

        ac.refresh();


        //从IOC容器中获取实例并使用
        Person person=ac.getBean("pe", Person.class);
        person.setName("gajj");
        person.setNumber("27345t1632kk");

        System.out.println(person);

        //如何在IOC容器中获取我们的BeanDefinition中的相关数据
        BeanDefinition be=ac.getBeanDefinition("pe");        //获取BeanDefinition对象
        String[] str=ac.getBeanDefinitionNames();                     //拿到BeanDefinition中的所有定义
        int account=ac.getBeanDefinitionCount();                      //拿到BeanDefinition中的所有定义的总数
        if(account==str.length)
        {
            System.out.println("Yes");
        }

    }


}
